package com.eagle.nenaboot.client.handler;

import com.eagle.nenaboot.common.protocol.DataPacket;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;

/**
 * <p>
 *  本地代理处理
 * <p>
 *
 * @author eagle liu
 * @since 2020/3/13 21:14
 */
public class LocalProxyHandler extends ChannelInboundHandlerAdapter {

    private ClientHandler clientHandler;

    private String channelId;

    public LocalProxyHandler(ClientHandler clientHandler, String channelId) {
        this.clientHandler = clientHandler;
        this.channelId = channelId;
    }

	/**
	 * 第7步: 上一步建立本地服务客户端连接后，本地服务的服务端就有自动返回，就触发了这里的方法，
	 * 接收到本地代理端口服务（比如3306）的数据后，向10240的客户端写入DataPacket
	 *
	 * 当服务端返回应答时候，调用这个方法
	 *
	 * @param ctx
	 * @param msg
	 */
	@Override
    public void channelRead(ChannelHandlerContext ctx, Object msg){
		System.out.println("第7步: 上一步建立本地服务客户端连接后，本地服务的服务端每一次返回数据，" +
				"就10240的客户端写入DataPacket");
        byte[] data = (byte[]) msg;
        DataPacket dataPacket = new DataPacket();
        dataPacket.setBytes(data);
        dataPacket.setChannelId(channelId);
//		clientHandler是10240端口的Handler，即拿到了10240的客户端，然后写入数据
        clientHandler.getCtx().writeAndFlush(dataPacket);
    }



    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        System.out.println("本地连接断开");
    }
}
